﻿using System;
using System.Collections.Generic;
using TPDiseño.DTO_s;

namespace TPDiseño.Clases_de_Entidad
{
    public class Cuestionario
    {
        //Atributos
        private int cod_cuestionario;
        private string clave;
        private int bloque;
        private DateTime fecha_inicio;
        private DateTime fecha_fin;
        private TimeSpan timepoTrascurrido;
        private Estado estado;

        private List<H_competencia> competencias;
        private List<H_pregunta> preguntas;
        private int cant_accesos;
        private DateTime ultimo_acceso;

        private Candidato candidato;


        public int _cod_cuestionario
        {
            get { return cod_cuestionario; }
            set { cod_cuestionario = value; }
        }
        public int _bloque
        {
            get
            {
                return bloque;
            }
            set
            {
                bloque = value;
            }
        }

        public DateTime _fecha_inicio
        {
            get
            {
                return fecha_inicio;
            }
            set
            {
                fecha_inicio = value;
            }
        }

        public DateTime _fecha_fin
        {
            get
            {
                return fecha_fin;
            }
            set
            {
                fecha_fin = value;
            }
        }
        public TimeSpan _timepoTrascurrido
        {
            get
            {
                return timepoTrascurrido;
            }
            set
            {
                timepoTrascurrido = value;
            }
        }
        public string _clave
        {
            get
            {
                return clave;
            }
            set
            {
                clave = value;
            }
        }


        public List<H_competencia> _competencias
        {
            get
            {
                return competencias;
            }
            set
            {
                competencias = value;
            }
        }
        public List<H_pregunta> _preguntas
        {
            get
            {
                return preguntas;
            }
            set
            {
                preguntas = value;
            }
        }
        public Estado _estado
        {
            get
            {
                return estado;
            }
            set
            {
                estado = value;
            }
        }
        public int _cant_accesos
        {
            get
            {
                return cant_accesos;
            }
            set
            {
                cant_accesos = value;
            }
        }
        public DateTime _ultimo_acceso
        {
            get
            {
                return ultimo_acceso;
            }
            set
            {
                ultimo_acceso = value;
            }
        }

        public Candidato _candidato
        {
            get { return candidato; }
            set { candidato = value; }
        }

        //Constructores
        public Cuestionario()
        {
        }
        public Cuestionario(Evaluacion unaEvaluacion, DTOCandidatoClave unCandidatoClave)
        {
            this._clave = unCandidatoClave.clave;
            this._fecha_inicio = unaEvaluacion._fecha_inicio;
            this._fecha_fin  = unaEvaluacion._fecha_fin;
            this._candidato = unCandidatoClave.candidatoInstancia();

            this._competencias = new List<H_competencia>();
        }


        public Cuestionario(int unCod_cuestionario, string unaClave, int unBloque, DateTime unaFecha_inicio, DateTime unaFecha_fin, TimeSpan unTiempoTrascurridoEstado, Estado unEstado,int unCantAcc, DateTime unUltimo_acceso)
        {
            this._cod_cuestionario = unCod_cuestionario;
            this._clave = unaClave;
            this._bloque = unBloque;
            this._estado = unEstado;
            this._fecha_inicio = unaFecha_inicio;
            this._fecha_fin = unaFecha_fin;
            this._timepoTrascurrido = unTiempoTrascurridoEstado;
            this._estado = unEstado;
            this._cant_accesos = unCantAcc;
            this._ultimo_acceso = unUltimo_acceso;
        }

        public Cuestionario(int unCod_cuestionario, string unaClave, int unBloque, DateTime unaFecha_inicio, DateTime unaFecha_fin, TimeSpan unTmepoTrascurridoEstado, Estado unEstado, List<H_competencia> unaListaDeCompetencias, List<H_pregunta> unaListaDePreguntas, Candidato unCandidato,int unCantAcc, DateTime unUltimo_acceso) :
            this(unCod_cuestionario, unaClave, unBloque, unaFecha_inicio, unaFecha_fin, unTmepoTrascurridoEstado, unEstado,unCantAcc, unUltimo_acceso)
        {

            this._competencias = unaListaDeCompetencias;
            this._preguntas = unaListaDePreguntas;
            this._candidato = unCandidato;
        }

        //METODOS


        public List<DTO_s.DTOPreguntasOpRta> recuperaPreguntaBloque()
        {

            List<DTO_s.DTOPreguntasOpRta> DTOcolpreg = new List<DTO_s.DTOPreguntasOpRta>();

            foreach (H_pregunta hpreg in this._preguntas)
            {
                if (hpreg._bloque == this.bloque)
                {
                    DTO_s.DTOPreguntasOpRta pregs = new DTO_s.DTOPreguntasOpRta();
                    pregs._preg = hpreg;
                    foreach (H_respuesta hresp in hpreg._respuestas)
                    {
                        pregs._rtas.Add(hresp);
                    }

                    DTOcolpreg.Add(pregs);
                }

            }

            return DTOcolpreg;
        }

        public void sumarAcceso()
        {
            _cant_accesos = _cant_accesos + 1;
            _ultimo_acceso = DateTime.Now;
        }

        public Cuestionario(TimeSpan tiempo)
        {
            this._timepoTrascurrido = tiempo;
        }

        public List<DTO_s.DTOPreguntasOpRta> recuperaPreguntaCuestionario()
        {

            List<DTO_s.DTOPreguntasOpRta> DTOcolpreg = new List<DTO_s.DTOPreguntasOpRta>();

            foreach (H_pregunta hpreg in this._preguntas)
            {
               
                    DTO_s.DTOPreguntasOpRta pregs = new DTO_s.DTOPreguntasOpRta();
                    pregs._preg = hpreg;
                    foreach (H_respuesta hresp in hpreg._respuestas)
                    {
                        pregs._rtas.Add(hresp);
                    }

                    DTOcolpreg.Add(pregs);
                

            }

            return DTOcolpreg;
        }
    }




}
